package com.mirror.utils.lang;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.annotation.SuppressLint;
import android.util.Log;

public class TimeUtils {

	/** TAG */
	private static final String TAG = "TimeUtils";

	/**
	 * 比较2个日期时间大小
	 * 
	 * @param date1
	 *            日期时间1
	 * @param date2
	 *            日期时间2
	 * @return 1：date1 > date2 | -1: date1 < date2 | 0:相等 | -2:异常
	 */
	@SuppressLint("SimpleDateFormat")
	public static int compareDate(String date1, String date2, String dateFormat) {
		Log.i(TAG, date1);
		Log.i(TAG, date2);
		DateFormat df = new SimpleDateFormat(dateFormat);
		try {
			Date dt1 = df.parse(date1);
			Date dt2 = df.parse(date2);
			return dt1.compareTo(dt2);
		}
		catch (ParseException e) {
			Log.e(TAG, "解析时间格式错误" + e.getMessage());
		}
		return -2;
	}

	/**
	 * 比较时间与当前时间的大小
	 * 
	 * @param date
	 *            日期时间
	 * @param dateFormat
	 *            日期格式
	 * @return 1：date > now | -1: date < now | 0:相等
	 */
	public static int compareTimeWithNow(String date, String dateFormat) {
		// TODO 不能信任客户端时间
		return getDate(date, dateFormat).compareTo(new Date(System.currentTimeMillis()));
	}

	/**
	 * 比较时间与当前时间的毫秒数
	 * 
	 * @param date
	 *            日期时间
	 * @param dateFormat
	 *            日期格式
	 * @return 毫秒数
	 */
	public static long fromNowTime(String date, String dateFormat) {
		// TODO 不能信任客户端时间
		Date now = getDate(date, dateFormat);
		return now.getTime() - System.currentTimeMillis();
	}

	/**
	 * 格式化时间
	 * 
	 * @param format
	 * @return
	 */
	@SuppressLint("SimpleDateFormat")
	public static String format(String format) {
		SimpleDateFormat sf = new SimpleDateFormat(format);
		return sf.format(new Date());
	}

	/**
	 * 格式化时间
	 * 
	 * @return
	 */
	public static String format() {
		return format("yyyyMMddHHmmss");
	}

	/**
	 * 获取时间
	 * 
	 * @param date
	 *            字符串时间
	 * @param dateFormat
	 *            时间格式
	 * @return 时间
	 */
	@SuppressLint("SimpleDateFormat")
	public static Date getDate(String date, String dateFormat) {
		DateFormat df = new SimpleDateFormat(dateFormat);
		try {
			return df.parse(date);
		}
		catch (ParseException e) {
			Log.e(TAG, "解析时间格式错误" + e.getMessage());
		}
		return null;
	}

	@SuppressLint("SimpleDateFormat")
	public static String getNexDate(String date, String dateFormat) {
		Calendar c = Calendar.getInstance();
		c.setTime(getDate(date, dateFormat));
		c.set(Calendar.DATE, c.get(Calendar.DATE) + 1);
		DateFormat df = new SimpleDateFormat(dateFormat);
		return df.format(c.getTime());
	}

	/**
	 * 计算时间差，单位：秒
	 * 
	 * @param date1
	 * @param date2
	 * @param dateFormat
	 * @return
	 */
	@SuppressLint("SimpleDateFormat")
	public static long getDateInterval(String date1, String date2, String dateFormat) {
		DateFormat df = new SimpleDateFormat(dateFormat);
		try {
			Date d1 = df.parse(date1);
			Date d2 = df.parse(date2);
			return (d1.getTime() - d2.getTime()) / 1000;
		}
		catch (ParseException e) {
			Log.e(TAG, "解析时间格式错误" + e.getMessage());
		}
		return 0;
	}
}
